<?php
include_once '../gerenciadores/AutoloadGerenciadores.php';

class RepositorioPlanoDeAula{
	private static $instancia;
	
	private function __construct(){
	}
	
	
	public static function getInstancia(){
		if(!isset(self::$instancia)){
			$class = __CLASS__;
			self::$instancia = new $class;
		}
		return self::$instancia;
	}
	
	public static function inserirPlanoDeAula(PlanoDeAula $plano){
		__autoload("Data");
		
		$dataEnvio = converteData($plano->getDataEnvio());
		$dataAula = converteData($plano->getDataAula());
	
		
		try{
			$sql = "INSERT INTO `planoaula`
				(`data`, `turno`, `idturma`, `iddisciplina`, `idaula`,
				 `metodologia`, `meios`, `idpessoa`, `envio`, `avaliacao`, `qtdaula`)
				 VALUES ('".
							 $dataAula."','".
							 $plano->getTurno()."','".
							 $plano->getTurma()->getIdTurma()."','".
							 $plano->getDisciplina()->getIdDisciplina()."','".
							 $plano->getObjetivo()."','".
							 $plano->getMetodologia()."','".
							 $plano->getMeios()."','".
							 $plano->getInstrutorEnviou()->getIdPessoa()."','".
							 $dataEnvio."','".
							 $plano->getAvaliacao()."','".
							 $plano->getQtdAulas()
							 ."');";
			
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}
		catch(PlanoDeAulaCadastraException $e){
			echo $e->getMessage();
		}
	}
	
	
	public static function getPlanoDeAula(Turma $turma, $data){
		__autoload("Conexao");
		__autoload("PlanoDeAula");
		__autoload("RepositorioDisciplina");
		__autoload("RepositorioInstrutor");
		__autoload("RepositorioCoordenadores");
	
		
		$sql = "SELECT * 
				FROM `planoaula` plano
				INNER JOIN `t_pladis` pladis ON (plano.idaula=pladis.idaula)  
				 WHERE plano.idturma = '".$turma->getIdTurma()."' AND plano.data='".$data."';";
		
		$tabela = Conexao::tabelaSql($sql);
		$coordenador = RepositorioCoordenadores::getCoordenador($turma->getIdTurma());
		
		
		$i=0;
		foreach ($tabela as $linha){
			$disciplina = RepositorioDisciplina::getDisciplina($linha["iddisciplina"]);
			
			$plano[$i] = new PlanoDeAula();
			$plano[$i] ->setAssunto($linha["conteudo"]);
			$plano[$i] ->setAvaliacao($linha["avaliacao"]);
			$plano[$i] ->setDataAula($linha["data"]);
			$plano[$i] ->setDataEnvio($linha["envio"]);
			$plano[$i] ->setDisciplina($disciplina);
			$plano[$i] ->setIdPlano($linha["id_plano"]);
			$plano[$i] ->setMeios($linha["meios"]);
			$plano[$i] ->setMetodologia($linha["metodologia"]);
			$plano[$i] ->setObjetivo($linha["objetivo"]);
			$plano[$i] ->setQtdAulas($linha["qtdaula"]);
			$plano[$i]->setInstrutorEnviou(RepositorioDePessoas::exibePessoa($linha['idpessoa']));
			$plano[$i] ->setTurma($turma);
			$plano[$i] ->setTurno($linha["turno"]);
			$plano[$i] ->setCoordenador($coordenador);
			$plano[$i]->setInstrutores(RepositorioInstrutor::listaInstrutorPlanoDeAula($turma, $disciplina));
			$plano[$i]->setNecessitaSecundario($linha["instrutor_secundario"]);
			$i++;
		}
		
		return $plano;
		
	}
	
	
	public static function getPlanoDeAulaCoordenador(Turma $turma, Pessoa $coordenador, $data){
		__autoload("Conexao");
		__autoload("PlanoDeAula");
		__autoload("RepositorioDisciplina");
		__autoload("RepositorioInstrutor");
	
	
		$sql = "SELECT p.conteudo, p.eixo, p.objetivo, avaliacao, data, envio, id_plano, meios, p.instrutor_secundario,
				metodologia, qtdaula, idpessoa, turno, a.iddisciplina, a.idaula, d.iddisciplina, d.disciplina, d.sigla,
				d.cargahoraria, d.ementa, d.conhecimento, d.habilidade, d.atitude, d.bibliografia,
				c.idcurso, c.siglacurso, c.nomecurso, 
				IFNULL((SELECT SUM(qtdaula) FROM `planoaula` b WHERE a.idturma = b.idturma AND b.data <= '".$data."' AND a.iddisciplina=b.iddisciplina AND b.id_plano<=a.id_plano),0) as totalAulas 
				 FROM `planoaula` a
				 INNER JOIN `t_pladis` p ON (a.idaula=p.idaula) 
				 INNER JOIN `tdisciplina` d ON (a.iddisciplina = d.iddisciplina)
				 INNER JOIN `tcursos` c ON (c.idcurso = d.idcurso)
				 WHERE `idturma` = '".$turma->getIdTurma()."' AND `data`='".$data."'
				 ORDER BY turno ASC, id_plano ASC;";
		
		$tabela = Conexao::tabelaSql($sql);
		$i=0;
		foreach ($tabela as $linha){
			$curso = new Curso();
			$curso->setSiglaCurso($linha['siglacurso']);
			$curso->setNomeCurso($linha['nomecurso']);
			$curso->setIdCurso($linha['idcurso']);
			
			$disciplina = new Disciplina();
			$disciplina->setIdDisciplina($linha['iddisciplina']);
			$disciplina->setNomeDisciplina($linha['disciplina']);
			$disciplina->setSiglaDisciplina($linha['cargahoraria']);
			$disciplina->setCargaHoraria($linha['cargahoraria']);
			$disciplina->setEmenta($linha['ementa']);
			$disciplina->setConhecimento($linha['conhecimento']);
			$disciplina->setHabilidade($linha['habilidade']);
			$disciplina->setAtitude($linha['atitude']);
			$disciplina->setBibliografia($linha['bibliografia']);
			$disciplina->setCurso($curso);
				
			$plano[$i] = new PlanoDeAula();
			$plano[$i] ->setAssunto($linha["conteudo"]);
			$plano[$i] ->setAvaliacao($linha["avaliacao"]);
			$plano[$i] ->setDataAula($linha["data"]);
			$plano[$i] ->setDataEnvio($linha["envio"]);
			$plano[$i] ->setDisciplina($disciplina);
			$plano[$i] ->setIdPlano($linha["id_plano"]);
			$plano[$i] ->setMeios($linha["meios"]);
			$plano[$i]->setEixos($linha["eixo"]);
			$plano[$i] ->setMetodologia($linha["metodologia"]);
			$plano[$i] ->setObjetivo($linha["objetivo"]);
			$plano[$i] ->setQtdAulas($linha["qtdaula"]);
			$plano[$i] ->setAulasMinistradas($linha["totalAulas"]);
			$plano[$i] ->setInstrutorEnviou(RepositorioDePessoas::exibePessoa($linha['idpessoa']));
			$plano[$i] ->setTurma($turma);
			$plano[$i] ->setTurno($linha["turno"]);
			$plano[$i] ->setCoordenador($coordenador);
			$plano[$i]->setInstrutores(self::instrutorPorDisciplina($turma, $disciplina));
			$plano[$i]->setNecessitaSecundario($linha["instrutor_secundario"]);
			$i++;
		}
		return $plano;
	}
	
	
	
	
	public static function getPlanoDeAulaInstrutor(Turma $turma, Disciplina $disciplina){
		__autoload("Conexao");
		__autoload("PlanoDeAula");
		__autoload("RepositorioDisciplina");
		__autoload("RepositorioInstrutor");
		__autoload("RepositorioCoordenadores");
	
	
		$sql = "SELECT p.conteudo, p.eixo, p.objetivo, avaliacao, data, envio, id_plano, meios, metodologia, qtdaula,
				 idpessoa, turno, a.iddisciplina, a.idaula, a.data, 
				(SELECT SUM(qtdaula) FROM `planoaula` b WHERE a.idturma = b.idturma AND b.data <= 'a.data' AND a.iddisciplina=b.iddisciplina ) as totalAulas
				 FROM `planoaula` a INNER JOIN `t_pladis` p ON (a.idaula=p.idaula) 
				 WHERE a.idturma = '".$turma->getIdTurma()."' AND a.iddisciplina='".$disciplina->getIdDisciplina()."';";
		
		$tabela = Conexao::tabelaSql($sql);
		
		$i=0;
		foreach ($tabela as $linha){	
			$plano[$i] = new PlanoDeAula();
			$plano[$i]->setAssunto($linha["conteudo"]);
			$plano[$i]->setAvaliacao($linha["avaliacao"]);
			$plano[$i]->setDataAula($linha["data"]);
			$plano[$i]->setDataEnvio($linha["envio"]);
			$plano[$i]->setDisciplina($disciplina);
			$plano[$i]->setIdPlano($linha["id_plano"]);
			$plano[$i]->setEixos($linha["eixo"]);
			$plano[$i]->setMeios($linha["meios"]);
			$plano[$i]->setMetodologia($linha["metodologia"]);
			$plano[$i]->setObjetivo($linha["objetivo"]);
			$plano[$i]->setQtdAulas($linha["qtdaula"]);
			$plano[$i]->setInstrutorEnviou(RepositorioDePessoas::exibePessoa($linha['idpessoa']));
			$plano[$i]->setTurma($turma);
			$plano[$i]->setTurno($linha["turno"]);
			$i++;
		}
		return $plano;	
	}
	
	
	
	
	
	public static function atualizaPlano(PlanoDeAula $plano){
		
		try{
			$sql = "UPDATE `planoaula` SET ";
			$contador = 0;
			if(!is_null($plano->getDataAula()) && !is_null($plano->getIdPlano())){
				$sql = $sql."`data`='".$plano->getDataAula()."'";
				$contador++;
			}
			
			if(!is_null($plano->getTurno()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`turno`='".$plano->getTurno()."'";
				$contador++;
			}
			
			
			if(!is_null($plano->getTurma()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$turma = $plano->getTurma();
				$sql = $sql."`idturma`='".$turma->getIdTurma()."'";
				$contador++;
			}
					
			if(!is_null($plano->getAssunto()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`assunto`='".$plano->getAssunto()."'";
				$contador++;
			}
			
			if(!is_null($plano->getObjetivo()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`objetivo`='".$plano->getObjetivo()."'";
				$contador++;
			}
			if(!is_null($plano->getMetodologia()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`metodologia`='".$plano->getMetodologia()."'";
				$contador++;
			}
			
			if(!is_null($plano->getMeios()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`meios`='".$plano->getMeios()."'";
				$contador++;
			}
			
			if(!is_null($plano->getAvaliacao()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`avaliacao`='".$plano->getAvaliacao()."'";
				$contador++;
			}
			if(!is_null($plano->getQtdAulas()) && !is_null($plano->getIdPlano())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`qtdaula`='".$plano->getQtdAulas()."'";
				$contador++;
			}
			
			$sql = $sql." WHERE `id_plano`='".$plano->getIdPlano()."';";
			
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}
		catch (PlanoDeAulaAlteraException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function deletaPlano($idPlano){
		try{
			$sql = "DELETE FROM `planoaula` WHERE `id_plano` = '".$idPlano."';";
			
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}
		catch (PlanoDeAulaDeletaException $e){
			echo $e->getMessage();
		}
	}

	private static function instrutorQueEnviou($tabelaInscricao, $idInstrutor){
		foreach ($tabelaInscricao as $inscricao){
			$inst = $inscricao->getCadastro()->getPessoa();
			if($inst->getIdPessoa()==$idInstrutor){
				return $inscricao;
			}
		}
	}
	
	private static function instrutorPorDisciplina(Turma $turma, Disciplina $disciplina){
		$sql = "SELECT pes.cpf, pes.nome, pes.cargo, pes.instituicao, inst.instrutor, inst.datainscricao  
				FROM `tinstrutor` inst INNER JOIN `tpessoa` pes ON (pes.idpessoa = inst.idpessoa) 
				WHERE idturma='".$turma->getIdTurma()."' AND iddisciplina='".$disciplina->getIdDisciplina()."'
				AND desistencia=0000-00-00;";
		
		
		__autoload("Conexao");
		$tabela = Conexao::tabelaSql($sql);
		
		$i=0;
		foreach ($tabela as $linha){
			__autoload("�nscricaoInstrutores");
			__autoload("Cadastro");
			$inscricao[$i] = new InscricaoInstrutores();
			$cadastro = new Cadastro();
			$pessoa = new Pessoa($linha['cpf'], $linha['nome'], $linha['cargo'], $linha['instituicao']);
			
			$cadastro->setTurma($turma);
			$cadastro->setTipoVinculo('1');
			$cadastro->setCurso($turma->getCurso());
			$cadastro->setPessoa($pessoa);
			
			
			
			$inscricao[$i]->setCadastro($cadastro);
			$inscricao[$i]->setTipoInstrutor($linha['instrutor']);
			$inscricao[$i]->setDataInscricao($linha['datainscricao']);
			$inscricao[$i]->setDisciplina($disciplina);
			
			$i++;
		}
		
		return $inscricao;
		
	}
	
	
}

?>